/**
  * @file	fmc.c
  *	@author	yoyoyes
  * @date	2023-6-7
  */

#include "fmc.h"

/**
  * @func	gd32_flash_erase
  * @param	start_page	起始页
  * @param	page_num	页数量
  * @return	none
  */
void gd32_flash_erase(uint16_t start_page, uint16_t page_num)
{
	uint16_t i;
	
	fmc_unlock();														/* 解锁 */
	for(i = 0; i < page_num; i++)
	{
		fmc_page_erase((GD_FLASH_BASE_ADDR + start_page * GD_FLASH_PAGE_SIZE) + (GD_FLASH_PAGE_SIZE * i));	/* 起始页地址（1页 = 1KB） */
	}
	fmc_lock();															/* 上锁 */
}  

/**
  * @func	gd32_flash_write
  * @param	start_addr	起始页地址
  * @param	data		数据指针
  * @param	byte_num	字节数量
  * @return	none
  */
void gd32_flash_write(uint32_t start_addr, uint32_t *data, uint32_t byte_num)
{
	fmc_unlock();
	while(byte_num)
	{
		fmc_word_program(start_addr, *data);							/* 写入一个字数据 */
		byte_num -= 4;
		start_addr += 4;
		data++;
	}
	fmc_lock();
}
